柯里化(Currying)他的名字就想到咖哩XD
Wikipedia:In mathematics and computer science, currying is the technique of translating a function that takes multiple arguments into a sequence of families of functions, each taking a single argument.
在數學和計算機科學中,柯里化(Currying))是一種技術,將原本接收多個參數的函式轉換成連續函式,讓每個函式只接收一個參數。
簡單說就是將原本多個參數一次處理,搭配閉包的特性變成一次處理一個參數。
function sum(x, y) {
return x + y;
}
sum(5, 7); //12
原本在寫函式我都會寫這樣,把要的參數全部放一起傳入,sum函式回傳結果為12。
//柯里化
function sum(x) {
return function (y) {
return x + y;
};
}
sum(5)(7);
改寫成柯里化後,sum函式接受一個參數x,然後回傳一個新的函式,回傳的函式接受第二個參數y,最後回傳兩者相加的結果。
也有看到其他種呼叫的寫法:
function sum(x) {
return function (y) {
return x + y;
};
}
const addTwoNumber = sum(5);
addTwoNumber(7);
這種方式將sum(5)的結果存在addTwoNumber變數中,當呼叫addTwoNumber(7)時,它把之前傳入的5和新的y值來計算結果。
存放變數的好處是,可以隨時傳入第二個參數,重複使用變數,並多次傳入不同的參數來增加靈活性。
而使用sum(5)(7)
是一次完成兩步驟,立即得到結果。
使用箭頭函式可以讓語法更簡潔,之後會再介紹箭頭函式,這邊先稍微提到怎麼改寫。
const sum = (x)=> (y) => x + y;
sum(5)(7);
以上分享~謝謝!
Currying in JavaScript(柯里化)
[JS] Functional Programming and Currying
Currying in JavaScript Explained With Examples